package cl.fcbarcelona.ejb.services;

import java.util.Date;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import cl.fcbarcelona.customExceptions.BorrarContratoException;
import cl.fcbarcelona.customExceptions.BorrarPersonalException;
import cl.fcbarcelona.model.dao.ContratoDAO;
import cl.fcbarcelona.model.dao.NacionalidadDAO;
import cl.fcbarcelona.model.dao.PersonalDAO;
import cl.fcbarcelona.model.dao.TipoPersonalDAO;
import cl.fcbarcelona.model.dto.ContratoDTO;
import cl.fcbarcelona.model.dto.NacionalidadDTO;
import cl.fcbarcelona.model.dto.PersonalDTO;
import cl.fcbarcelona.model.dto.TipoPersonalDTO;

/**
 * Session Bean implementation class PersonalService
 */
@Stateless
public class PersonalService implements PersonalServiceRemote {

	@EJB
	private PersonalDAO personalDAO;
	@EJB
	private NacionalidadDAO nacionalidadDAO;
	@EJB
	private ContratoDAO contratoDAO;
	@EJB
	private TipoPersonalDAO tipoPersonalDAO;
	@EJB
	private ContratoServiceRemote contratoService;
	
    public PersonalService() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public Integer agregarPersonal(String nombre, String apellido, Date fechaNacimiento,Integer valorBase,
    		String tipoPersonal, String pais, Integer idContrato){
    	
    	TipoPersonalDTO tipoPersonalDTO = tipoPersonalDAO.findTipoPersonalByTipo(tipoPersonal);
    	NacionalidadDTO nacionalidadDTO = nacionalidadDAO.findNacionalidadByPais(pais);
    	
    	ContratoDTO contratoDTO = contratoDAO.findContratoById(idContrato.longValue());
    	
    	PersonalDTO personalDTO = new PersonalDTO();
    	personalDTO.setNombre(nombre);
    	personalDTO.setApellido(apellido);
    	personalDTO.setFechaNacimiento(fechaNacimiento);
    	personalDTO.setValorBase(valorBase);
    	personalDTO.setTipoPersonal(tipoPersonalDTO);
    	personalDTO.setNacionalidad(nacionalidadDTO);
    	personalDTO.setContrato(contratoDTO);
    	personalDTO.setContratado(1);
    	
    	personalDAO.agregar(personalDTO);
    	return (int)personalDTO.getId();
    }
    
    @Override
    public void actualizarPersonal(Integer id, String nombre, String apellido, Date fechaNacimiento,Integer valorBase,
    		String tipoPersonal, String pais, Integer idContrato){
    	TipoPersonalDTO tipoPersonalDTO = tipoPersonalDAO.findTipoPersonalByTipo(tipoPersonal);
    	NacionalidadDTO nacionalidadDTO = nacionalidadDAO.findNacionalidadByPais(pais);
    	ContratoDTO contratoDTO = contratoDAO.findContratoById(idContrato.longValue());
    	
    	PersonalDTO personalDTO = personalDAO.findPersonalById(id.longValue());
    	if(nombre!=null)
    		personalDTO.setNombre(nombre);
    	if(apellido!=null)
    		personalDTO.setApellido(apellido);
    	if(fechaNacimiento!=null)
    		personalDTO.setFechaNacimiento(fechaNacimiento);
    	if(valorBase!=null)
    		personalDTO.setValorBase(valorBase);
    	if(tipoPersonalDTO!=null)
    		personalDTO.setTipoPersonal(tipoPersonalDTO);
    	if(nacionalidadDTO!=null)
    		personalDTO.setNacionalidad(nacionalidadDTO);
    	if(contratoDTO!=null)
    		personalDTO.setContrato(contratoDTO);
    	personalDAO.actualizar(personalDTO);
    	
    }
    
    @Override
    public void borrarPersonal(Integer id) throws BorrarPersonalException{
    	
    	BorrarPersonalException epe = new BorrarPersonalException();
    	PersonalDTO personalDTO = personalDAO.findPersonalById(id.longValue());
    	if(personalDTO==null){
    		throw epe;
    	}
    	ContratoDTO contratoDTO = personalDTO.getContrato();
    	personalDAO.eliminar(personalDTO);
    	try {
			contratoService.borrarContrato((int)contratoDTO.getId());
		} catch (BorrarContratoException e) {
			e.printStackTrace();
		}  	
    }
}
